package exercises.newcoder.solution;

/**
 * <a href="https://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b?tpId=13&&tqId=11166&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking">
 * JZ13 调整数组顺序使奇数位于偶数前面</a>
 *
 * @author or2
 * @Description 输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有的奇数位于数组的前半部分，所有的偶数位于数组的后半部分，并保证奇数和奇数，偶数和偶数之间的相对位置不变。
 * @create 2021年09月10日 时间: 12:14
 */
public class ReOrderArray {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * @param array int整型一维数组
     * @return int整型一维数组
     */
    public int[] reOrderArray(int[] array) {
//        统计奇数的个数
        int oddTotal = 0;
        for (int j : array) {
//            对2 取模
            if ((j & 1) == 1) {
                oddTotal++;
            }
        }
//        奇数开始插入的位置
        int oddIndex = 0;
        int[] ans = new int[array.length];
        for (int j : array) {
//            插入奇数
            if ((array[oddIndex] & 1) == 1) {
                ans[oddIndex] = j;
                oddIndex++;
            } else {
//                插入偶树
                ans[oddTotal] = j;
                oddTotal++;
            }
        }
        return ans;
    }
}
